﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace LKLCode.MotionControlCard
{
    public interface IMotion
    {
        /// <summary>
        /// 运动卡状态
        /// </summary>
        MotionStatus MotionStatus { get; }

        /// <summary>
        /// 轴对象列表
        /// </summary>
        /// <param name="axisNums">轴号列表，用于指定需要配置的轴编号</param>
        /// <param name="axisTypes">轴类型列表，用于指定每个轴的类型</param>
        Test_IAxis[] Axises { get; }

        /// <summary>
        /// 初始化所有轴
        /// </summary>
        /// <param name="axisesInitType"></param>
        /// <param name="axisTypes">轴类型列表，用于指定每个轴的类型</param>
        void InitAllAixs(AxisInitType[] axisesInitType);

        /// <summary>
        /// 运动卡急停
        /// </summary>
        void EmergenStop();

        /// <summary>
        /// 解除急停
        /// </summary>
        void ResetEmergenStop();

        /// <summary>
        /// 运动卡暂停
        /// </summary>
        void Pause();

        /// <summary>
        /// 运动卡从暂停中恢复
        /// </summary>
        void Resume();

        /// <summary>
        /// 关闭运动卡（断开连接）
        /// </summary>
        void Close();

        /// <summary>
        /// 运动卡ID号
        /// </summary>
        /// <returns></returns>
        string GetMotioCardId();











    }
    /// <summary>
    /// 运动卡状态
    /// </summary>
    public struct MotionStatus
    {
        //使用internal set修饰符可以控制属性的可访问性，使其只能在同一个程序集内进行设置，
        //而在程序集外则是只读的。这在某些情况下非常有用，
        //比如你希望在程序集内部修改属性，但不希望外部程序集直接修改它。

        /// <summary>
        /// 暂停中
        /// </summary>
        public bool IsPause { get; internal set; }


        /// <summary>
        /// 运动卡急停中
        /// </summary>
        public bool IsEmergentStop { get; internal set; }

        /// <summary>
        /// 已连接
        /// </summary>
        public bool IsConnected { get; internal set; }

    }
}

